package cn.kgc.jihe.LinkedList01;
import java.util.LinkedList;
import java.util.List;
/**
 第1题：使用LinkedList模拟一个堆栈数据结构,写一个 MyStack 类，表示“栈”这种数据结构。
 栈在表示上，就如同一个单向开口的盒子，每当有新数据进入时，都是进入栈顶。其基
 本操作为 push 和 pop。push 表示把一个元素加入栈顶，pop 表示把栈顶元素弹出。
 示意图如下：
 栈的特点：先进后出。
 栈的基本操作：
 1） push(Object o)：表示把元素放入栈
 2） Object pop()：返回栈顶元素，并把该元素从栈中删除。如果栈为空，则返回 null 值
 3） Object peek()：返回栈顶元素，但不把该元素删除。如果栈为空，则返回 null 值。
 4） boolean isEmpty()：判断该栈是否为空
 5） int size()：返回该栈中元素的数量
 */
public class MyStack {
    LinkedList<Integer>list=new LinkedList<>();
       public void push(Integer o){
             list.add(o);
       }
      public Integer pop(){
           if (list.size()==0){
              return null;
           }else {
               return list.remove(list.size()-1);
           }
      }
      public Integer peek(){
          if (list.size()==0){
              return null;
          }else {
              return list.get(list.size()-1);
          }
      }
      public boolean isEmpty(){
           return  list.size()==0;
      }
      public int size(){
           return list.size();
      }

    public static void main(String[] args) {
        MyStack myStack = new MyStack();
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);
        myStack.push(5);
        System.out.println("栈的大小："+myStack.size());
        System.out.println("栈是否为空?"+myStack.isEmpty());

        System.out.println(myStack.peek());
        System.out.println(myStack.peek());
        System.out.println(myStack.peek());
        System.out.println(myStack.peek());
        System.out.println(myStack.peek());
        System.out.println("......................................");
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());

    }

}
